package org.dxy.domain.model.valobj;

import java.util.List;

/**
 * BOM物料项 值对象 - Domain层
 * @author dxy
 * @createTime 2025/8/24
 */
public record BomItem(
        /**
         * 物料编码
         */
        String materialCode,

        /**
         * 物料名称
         */
        String materialName,

        /**
         * 物料数量
         */
        Integer quantity,

        /**
         * 物料单位
         */
        String unit,

        /**
         * 备注
         */
        String remark,

        /**
         * 子级物料项（支持多层级结构）
         */
        List<BomItem> children
) {
    
    /**
     * 创建叶子节点物料项（无子项）
     */
    public static BomItem leaf(String materialCode, String materialName, 
                              Integer quantity, String unit, String remark) {
        return new BomItem(materialCode, materialName, quantity, unit, remark, List.of());
    }
    
    /**
     * 检查是否为叶子节点
     */
    public boolean isLeaf() {
        return children == null || children.isEmpty();
    }
    
    /**
     * 检查物料项是否有效
     */
    public boolean isValid() {
        return materialCode != null && !materialCode.trim().isEmpty()
               && materialName != null && !materialName.trim().isEmpty()
               && quantity != null && quantity > 0
               && unit != null && !unit.trim().isEmpty();
    }
}